/**
* Created with CLion.
* User:Lenovo
* Date:2023-05-18
* Time:3:57
* Description:栈
*/

#include "Stack.h"

void TestStack1()
{
    ST st;
    STInit(&st);
    STPush(&st, 1);
    STPush(&st, 2);
    STPush(&st, 3);
    STPush(&st, 4);
    while (!STEmpty(&st))
    {
        printf("%d ", STTop(&st));
        STPop(&st);
    }
    printf("\n");
}

bool isValid(char * s)
{
    ST st;
    STInit(&st);
    while (*s)
    {
        if (*s == '(' || *s == '{' || *s == '[')
        {
            STPush(&st, *s);
            s++;
        }
        else
        {
            if (STEmpty(&st))
            {
                return false;
            }
            else
            {
                STDataType tmp = STTop(&st);
                STPop(&st);
                if (*s != tmp)
                {
                    return false;
                }
                s++;
            }
        }
    }
    return STSize(&st) == 0;
}

int main()
{
    // 栈：一种数据结构，在顺序表和链表的基础上做了更多的限定
    // 只能在一端进行插入和删除操作，这一端叫做栈顶，而另外一端叫做栈底
    // 特性：先进后出，后进的先出
    // 插入 -> 压栈/进栈，删除 -> 出栈
    // 实现栈有两种方式：数组栈，链式栈(单链表的头作栈顶)

    TestStack1();
    char *s = "()";
    isValid(s);

    return 0;
}
